/*
给定一个二叉树，检查它是否是镜像对称的。

例如，二叉树 [1,2,2,3,4,4,3] 是对称的。

    1
   / \
  2   2
 / \ / \
3  4 4  3
但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:

    1
   / \
  2   2
   \   \
   3    3
说明:

如果你可以运用递归和迭代两种方法解决这个问题，会很加分。

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/symmetric-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
* */
public class IsSymmetricTree {

    public class TreeNode {
      int val;
      TreeNode left;
      TreeNode right;
      TreeNode(int x) { val = x; }
  }

    public boolean isSymmetric(TreeNode root) {

        if(root == null){
            return false;
        }

        return isSameTree(root.left, root.right);
    }

    public boolean isSameTree(TreeNode a, TreeNode b){
        if(a == null && b == null){
            return true;
        }
        if(a == null || b ==null ){
            return false;
        }

        if(a.val == b.val){
            return isSameTree(a.left, b.right) && isSameTree(a.right, b.left);
        }
        return false;
    }
}
